微服务的核心组件由哪些方面组成
微服务的核心组件由以下方面组成:
服务通信:对于服务通信,微服务架构明确要求服务之间通过跨进程的远程调用方式进行通信。关于远程调用,有三种风格的解决方案,即RPC、REST和自定义实现。在服务与服务的交互方式上,也存在两个维度,即按照交互对象的数量分为一对一和一对多,以及按照应答返回的方式分为同步和异步。目前RPC框架可供选型的余地很大,如Alibaba Dubbo、Facebook Thrift以及Google g RPC等都是非常主流的实现,而REST的实现则包括Jersey和Spring MVC等。
事件驱动:事件驱动模式的表现形式通常是各种消息中间件,如实现JMS(Java Message Service, Java消息服务)规范的Active MQ、实现AMQP(Advanced Message Queuing Protocol,高级消息队列协议)规范的 Rabbit MQ,还有在大数据流式计算领域中应用非常广泛的Kafka,当然还有像Alibaba自研的Rocket MQ。在这些消息中间件中,Active MQ一般不考虑,如果是相对比较轻量级的应用可以选择Rabbit MQ,而Kafka则适合大型应用的场景。
负载均衡:负载均衡分为服务器端负载均衡和客户端负载均衡两大类实现方案。从服务器软件上,我们可以选择Nginx、HA Proxy、Apache、LVS等工具。而Netflix Ribbon则是一种单独可以使用的客户端负载均衡机制。事实上所有的分布式服务框架基本都内置了负载均衡的实现,所以负载均衡本身并不需要做太多的选择。
API网关:API网关是微服务架构的核心组件之一。Spring旗下有一个Spring Cloud Netflix Zuul提供了一套过滤器机制,可以很好地支持签名校验、登录校验等前置过滤功能处理,同时它也维护了路由规则和服务实例,以便完成服务路由功能。其他可供参考的 API 网关还有Mashape和开源的Kong等。
配置管理:配置管理的作用是完成集中式的配置信息管理。目前比较主流的包括 Spring 旗下的Spring Cloud Config、淘宝的 Diamond 和百度的 Disconf 等。在实现上,Spring Cloud Config支持配置信息放在配置服务的内存中(即本地),也支持放在远程Git仓库,这点与其他工具在设计上有较大不同。Diamond和Disconf都是基于Mysql作为存储媒介,Diamond采用拉模型,即每隔 15s拉一次全量数据;而Disconf 基于 Zookeeper 的推模型,实时推送。在配置数据模型上,Diamond 只支持 Key-Value 结构的数据,非配置文件模式;Disconf支持传统的配置文件模式,也支持Key-Value结构数据。